iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
自我挑戰組

網站主題切換功能系列 第 28

Day28:僅顯示已標記的待辦項目(2)

  • 分享至 

  • xImage
  •  

前言

今天的目標是完成待辦事項的篩選功能。我將實作 filterCompletedItems()showAllItems() 方法,讓使用者可以在網站上查看特定的待辦事項。

實作 filterCompletedItems()

首先,我先實作 filterCompletedItems() 方法。這個方法的目的是將待辦事項分類成不同的類別:

  • completedItems1 和 completedItems2:分別包含在 todoContainercompletedContainer 中所有已被標記的待辦項目
  • nonCompletedItems1 和 nonCompletedItems2:則是用來存放 todoContainercompletedContainer 中所有未被標記的待辦項目

以下為相關程式碼片段:

const completedItems1 = this.todoContainer.querySelectorAll(
  ".todolist-item.completed"
);
const completedItems2 = this.completedContainer.querySelectorAll(
  ".todolist-item.completed"
);
const nonCompletedItems1 = this.todoContainer.querySelectorAll(
  ".todolist-item:not(.completed)"
);
const nonCompletedItems2 = this.completedContainer.querySelectorAll(
  ".todolist-item:not(.completed)"
);

接下來,我將會隱藏兩個容器中的未標記待辦項目,只讓已標記項目顯示在網站上。我使用 forEach 來遍歷所有的項目,並將未標記的項目設置為不顯示,將已標記的項目設置為 flex。以下為相關程式碼:

// 隱藏未標記待辦事項
nonCompletedItems1.forEach((item) => {
  item.style.display = "none";
});
nonCompletedItems2.forEach((item) => {
  item.style.display = "none";
});

// 顯示已標記待辦事項
completedItems1.forEach((item) => {
  item.style.display = "flex";
});
completedItems2.forEach((item) => {
  item.style.display = "flex";
});

這樣就可以看到當我按下篩選器中的"顯示已標記項目"時,網站示意圖如下:
https://ithelp.ithome.com.tw/upload/images/20231008/20162569JCeEBNSBYk.png

最後,我將實作 showAllItems() 方法,它的程式碼很簡單,基本上和 filterCompletedItems() 方法一樣,唯一的差別就是將所有項目的樣式都設置成 flex,以便讓它們可以在網頁上正常顯示。

以下為部分程式碼:

// 隱藏未標記待辦事項
nonCompletedItems1.forEach((item) => {
  item.style.display = "flex";
});
nonCompletedItems2.forEach((item) => {
  item.style.display = "flex";
});

// 顯示已標記待辦事項
completedItems1.forEach((item) => {
  item.style.display = "flex";
});
completedItems2.forEach((item) => {
  item.style.display = "flex";
});

https://ithelp.ithome.com.tw/upload/images/20231008/20162569b5ls6jA7k4.png


上一篇
Day27:僅顯示已標記的待辦項目(1)
下一篇
Day29:修改篩選器的樣式:消除下拉箭頭
系列文
網站主題切換功能30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言